#ifndef __COMM_H
#define __COMM_H

#include <stdint.h>

#define WOBOT_PRE_LE    0x6877
// #define WOBOT_PRE_BE    0x7768
#define WOBOT_IDX       0x00
#define WOBOT_A         0x0A
typedef struct wobot_down_message {
    uint16_t    pre;
    uint8_t     len;
    uint8_t     idx;
    uint8_t     action;
    uint8_t     device_id;
    uint8_t     param[10];
} wobot_down_message;

typedef struct wobot_down_message_payload {
    uint8_t action;
    uint8_t device_id;
    uint8_t param_len;
    uint8_t param[10];
} wobot_down_message_payload;

#define WOBOT_CRLF_LE   0x0A0D
// #define WOBOT_CRLF_BE   0x0D0A
typedef struct wobot_up_message {
    uint16_t    pre;
    uint8_t     idx;
    uint8_t     value;
    uint16_t    crlf;
} wobot_up_message;

typedef __packed struct wobot_up_message_ultrasonic {
    uint16_t pre;
    uint8_t  idx;
    float    value;
    uint8_t  device_id;
    uint8_t  port;
    uint16_t  crlf;
} wobot_up_message_ultrasonic;

typedef __packed struct wobot_up_message_button {
    uint16_t pre;
    uint8_t  idx;
    uint8_t  value;
    uint8_t  device_id;
    uint8_t  port;
    uint16_t  crlf;
} wobot_up_message_button;

typedef __packed struct wobot_up_message_switch {
    uint16_t pre;
    uint8_t  idx;
    uint8_t  value;
    uint8_t  device_id;
    uint8_t  port;
    uint16_t  crlf;
} wobot_up_message_switch;

typedef enum wobot_action {
    GET = 1,
    RUN = 2,
} wobot_action;

typedef enum wobot_device_id {
    /*以下都是RUN*/
    ACT_ENCODE_MOTOR = 0x0C,           // 编码电机 √
    // ACT_ENCODE_MOTOR_ALL = 121,      // 编码电机
    // ACT_DC_MOTOR = 53,  	            // 直流电机
    // ACT_SMART_MOTOR_SPEED_POS = 54,  // 智能电机位置
    // ACT_SMART_MOTOR_SPEED = 55,      // 智能电机速度
    ACT_PWM_SERVO = 0x0B,              // 舵机
    // ACT_STEP_MOTOR = 40,             // 步进电机
    // ACT_EMAGNET = 58,                // 电磁铁
    // ACT_DIG_OUTPUT = 30,             // 数字输出

    // DIS_LATT_EMOTION = 41,           // 情景屏
    // DIS_LATT_EMOTION_CLOSE = 42,     // 关闭情景屏
    // DIS_LATT_SYMB = 43,              // 设置情景屏符号
    // DIS_LATT_USED = 44,              // 自定义情景屏
    // DIS_LATT_CLOSE = 45,             // 关闭情景屏

    // DIS_DIGTUBE_VALUE = 56,          // 数码管
    // DIS_DIGTUBE_CLEAN = 57,          // 清空数码管

    // DIS_LED_RGB = 18,                // 设置灯光RGB值
    // DIS_LED_COLOR = 19,              // 设置灯光颜色
    // DIS_LED_CLOSE = 20,              // 关闭灯光
    // DIS_LED_MODULE_RGB = 21,         // 设置灯光模块
    // SYS_TIMER = 50,                 // 获取系统时间
    // SYS_STOP = 100,                 // 系统停止
    
    /*以下都是GET*/
    // SENS_GRAY_LINE = 201,           // 灰度检测到黑线/白线
    // SENS_GRAY_VAL = 202,            // 单灰度
    // SENS_FIRE_VAL = 203,            // 火焰传感器
    // SENS_TEMP_VAL = 204,            // 温度传感器
    // SENS_HUMIT_VAL = 205,           // 湿度传感器
    // SENS_VOLUM_VAL = 206,           // 音量检测
    // SENS_LIGHT_VAL = 207,           // 环境光
    SENS_SONIC_VAL = 0xD1,           // 超声模块 √
    // SENS_SONIC_VAL_U32 = 230,       // 超声模块1
    // SENS_GAS_VAL = 210,             // 气体传感器
    // SENS_IRR_RECVER = 211,          // 红外接收器
    // SENS_IRR_VAL = 212,             // 红外传感器
    // SENS_SWITCH_VAL = 213,          // 电位器
    // SENS_BT_RECVER = 100,           // 蓝牙接收器
    // SENS_BT_REMOTE_JOINT = 215,     // 蓝牙手柄
    // SENS_JOINT_ARM = 217,           // 摇杆传感器
    // SENS_TOUCH_STA = 218,           // 触摸传感器
    // SENS_MULKEY_VAL = 219,          // 按键开关
    // SENS_GYRO_VAL = 220,            // 陀螺仪
    // SENS_LIMIT_SWITCH_STA = 221,    // 限位开关
    // SENS_WATER_TEMP_VAL = 222,      // 水温传感器
    // SENS_ANO_INPUT = 223,           // 模拟输入

    // SENS_BTN_INPUT = 0xE1,           // 按键 √
    DIS_LIGHT = 0x3B,                // 灯 √

    ACT_CHASSIS = 0x0D,             // 整个底盘 √

    ACT_DOOR    = 0x0E,             // 粮草门
    ACT_ARM     = 0x0F,             // 战利品臂
    ACT_PLATFORM= 0x10,             // 平台
    ACT_SIDECAM = 0x11,             // 侧摄像头
    ACT_FLAG    = 0x16,             // 举旗

    SENS_SWITCH = 0xD6,             // 拨码开关
    SENS_BUTTON = 0xD8,              // 按键
} wobot_device_id;

#endif /* !__COMM_H */